const match_cur_file_urlTag = 'match_cur_file_url';
const url_split = '/';

/**
 * 忽略 的 关联字 集
 */
const ignore_key_world_arr = [
  'src',
  'Func',
  'Classes',
  'DataDefine',
  'api',
  'apiTest',
  '',
];

/**
 * @type {RegExp}
 * 匹配 文件 的 链路 信息
 *
 */
const reg_file_url =
  /file:\/\/\/[A-Z]:\/(?<root>.*?)\/(?<center_url>.*\/)?(?<file_name>.*\..*)/;

class match_cur_file_url {
  get [Symbol.toStringTag]() {
    return match_cur_file_urlTag;
  }

  /**
   *
   */
  constructor(file_url: string) {
    let match_info = file_url.match(reg_file_url);
    if (match_info == null) {
      return;
    }

    let group = match_info.groups;
    if (group == null) {
      return;
    }

    this.root = group.root;
    this.center_url = group.center_url;
    this.file_name = group.file_name;

    this.center_url_arr = this.center_url.split('/');
  }

  /**
   * 根元素
   */
  root?: string;

  /**
   * 中间 字符串
   */
  center_url?: string;

  /**
   * 中间 路径 集
   */
  center_url_arr?: string[];

  /**
   * 当前 文件名
   */
  file_name?: string;

  /**
   * 返还 链路 url
   * 策略 忽略 src func 文件名 形成的 链路
   */
  link_url(): string {
    let ret: string[] = [];
    this.center_url_arr?.forEach((val) => {
      if (!ignore_key_world_arr.includes(val)) {
        ret.push(val);
      }
    });

    return ret.join(url_split);
  }

  /**
   * 返回 当前 api 文件名
   */
  last_url(): string {
    let conect_url = '';

    if (this.center_url_arr == undefined) {
      return '/';
    }

    let ind;
    for (ind = this.center_url_arr.length - 1; ind >= 0; ind--) {
      if (ignore_key_world_arr.includes(this.center_url_arr[ind])) {
        continue;
      }
      conect_url += '/' + this.center_url_arr[ind];
      break;
    }

    return conect_url;
  }
}

export { match_cur_file_url };
